Javascript Traps 发表于 2017-04-12 javascript 陷阱集考作用域1234567(function() {var b = 5;var a = b; b = 6;console.log(a,b);//5 6})(); 1234567891011121314151617181920var g = 0;function f() { // 这里面就形成了一个方法作用域, 能够保护其中的变量不能被外部访问 // 方法作用域能够访问全局作用域 var a = 1; console.log(g); // 嵌套方法作用域 function ff() { // 这里面再度形成了一个方法作用域 // 其中可以访问外部的那个方法作用域 var aa = 2; console.log(a); } // 出了 ff 的作用域就不能访问其中的东西了 // console.log(aa); // 报错 ReferenceError: aa is not defined}f();// console.log(a); // 报错 ReferenceError: a is not defined 考声明提前1234567891011//考声明提前function test() { console.log(a); console.log(foo()); var a = 1; function foo() { return 2; }}test(); 考 this1234567891011var fullname = 'John Doe';var obj = { fullname: 'Colin Ihrig', getFullname: function() { return this.fullname; }};console.log(obj.getFullname()); //Colin Ihrigvar test = obj.getFullname; //John Doeconsole.log(test()); 制造干扰因素的版本1234567891011121314151617var fullname = 'John Doe';var obj = { fullname: 'Colin Ihrig', prop: { fullname: 'Aurelio De Rosa', getFullname: function() { return this.fullname; } }, getFullname: function() { return this.fullname; }};console.log(obj.prop.getFullname()); //Aurelio De Rosaconsole.log(obj.getFullname()); //Colin Ihrigvar test = obj.prop.getFullname; //John Doeconsole.log(test()); 分号陷阱1234567891011121314//分号陷阱function fn(){ return { x:1 };} //{x:1} function fn(){ return { x:1 };}console.log(fn()) //undefined 小数相加1234//不要相信js的符点运算结果,但是整数是可依赖的0.1 + 0.2 不等于 0.3 //0.30000000000000004可用如下(0.1*10 + 0.2*10)/10